package rladidxo.basic;

public class J12_SungJuk_v4b {
public static void main(String[] args) {
	//접근 지정자를 이용해서 SungJuk클래스 정의
	J12SungJuk sj = new J12SungJuk();
	//sj.name = "지현";
	//name 멤버변수는 접근지정자가 private이므로
	//위 코드처럼 작성하면 오류 발생!!
	sj = new J12SungJuk("지현",66,75,100);
	//어쩔 수 없이 생성자를 이용해서 
	//name, kor, eng, mat 멤버 변수를 초기화 함
	
	//System.out.println(sj.name);
	//하지만, 기존 방식으로 name변수를 출력하려고 해도
	//private 접근 지정자 때문에 오류 발생!!
	
	//따라서, private로 선언된 멤버변수를
	//조작하거나 값을 읽어올려오려면 그것을 위한 특별한 메소드를 작성하는것이 좋다
	//실무에서는 setter/getter 메소드를 작성함
	sj.setName("수지");
	sj.setTot();sj.setAvg();sj.setGrd();
	
	/*System.out.println(sj.getName());
	System.out.println(sj.getKor());
	System.out.println(sj.getEng());
	System.out.println(sj.getMat());
	System.out.println(sj.getTot());
	System.out.println(sj.getAvg());
	System.out.println(sj.getGrd());*/
	//toString()메서드를 이용해서
	//객체의 모든 멤버변수 출력하기
	System.out.println(sj.toString());
	
}//main
}//class

class J12SungJuk {
	private String name;
	private int kor;
	private int eng;
	private int mat;
	
	private int tot;
	private double avg;
	private char grd;
	public J12SungJuk() {}
	public J12SungJuk(String name, int kor, int eng , int mat) {
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
	}
	// setter 메서드 : 멤버변수에 값을 set하기 위한 메서드
	// public void set멤버변수명( 자료형 멤버변수명){
	//			this.멤버변수명 = 멤버변수명;
	//}
	public void setName(String name){
		this.name = name;
	}
	public void setKor(int kor){
		this.kor = kor;
	}
	public void setEng(int eng){
		this.eng = eng;
	}
	public void setMat(int mat){
		this.mat = mat;
	}
	public void setTot(){
		this.tot = kor+eng+mat;
	}
	public void setAvg(){
		this.avg = tot/3;
	}
	public void setGrd(){
		switch((int)avg/10){
		case 10:
		case 9:grd = '수';break;
		case 8:grd = '우';break;
		case 7:grd = '미';break;
		case 6:grd = '양';break;
		default:grd = '가';break;
		}
	}
	// getter 메서드 : 멤버변수의 값을 get하기 위한 메서드
	// public 멤버변수의 자료형 get멤버변수명( ){
	//			return 멤버변수명;
	//}
	public String getName(){
		return name;
	}
	public int getKor(){
		return kor;
	}
	public int getEng(){
		return eng;
	}
	public int getMat(){
		return mat;
	}
	public int getTot(){
		return tot;
	}
	public double getAvg(){
		return avg;
	}
	public char getGrd(){
		return grd;
	}
	//멤버변수의모든 값을 출력하기 위해
	//Object 클래스가 기본으로 제공하는
	//메서드인 toString()을 재정의 override
	@Override //어노테이션 : 컴파일러를 위한 주석
	public String toString() {
		String result = "";
		result =result + "이름: "+name+" ";
		result +="국어: "+kor+" ";
		result +="영어: "+eng+" ";
		result +="수학: "+mat+" ";
		result +="총점: "+tot+" ";
		result +="평균: "+avg+" ";
		result +="등급: "+grd+" ";
		return result;
	}
}

